在古早時代,我們將寫好的信放入信封寄給對方。如果在傳送途中有人偷拿走信件,打開看完再封回去,甚至偷偷篡改裡面的內容,後果將不堪設想。
設想一下,如果信裡寫的是一筆大訂單的匯款帳號,駭客把帳號改成自己的,你把錢匯過去後不僅拿不到貨、賠了巨款,甚至可能讓公司直接倒閉!
不希望資料被偷窺,不希望內容被篡改,更不希望對接的系統是冒牌貨。這正是密碼學要解決的核心問題。
講白話一點,密碼學在現代軟體工程中幫我們守護的,就是下面這四大重點:
1. 機密性 (Confidentiality)
簡單說就是「只有該看的人才看得到」。就算信被攔截了,打開來也只會看到一堆看不懂的亂碼,沒有金鑰就別想知道裡面寫什麼。
2. 完整性 (Integrity)
簡單說就是「內容不能偷偷被改」。收信的人要能夠確定,這封信從寄出到送達的路上,沒有被任何人動過手腳、改過任何一個字。
3. 鑑別性 (Authentication)
簡單說就是「確認這封信真的是他寫的」。收到信時,你要能證明這真的是某個特定的人寄來的,而不是別人冒名頂替、假裝成他寄的。
4. 不可否認性 (Non-repudiation)
簡單說就是「他之後賴不掉」。萬一以後對方翻臉不認帳,說「我沒有寄過這封信」,你手上要有證據可以證明,這封信真的是他親手寄出的。
這兩個特別再舉個例子會更深刻的理解
【鑑別性】
上鎖的冰箱裡放著一塊蛋糕,只有 Bob 與 Alice 兩人擁有鑰匙。當 Bob 打開冰箱發現蛋糕不見了,因為確定不是自己吃的,他能立刻識別出「這一定是 Alice 拿走的」(達成鑑別性)。但如果鬧上法庭,Alice 完全可以耍賴辯稱:「Bob 自己也有鑰匙,是他吃掉想栽贓我!」法官無法判斷誰說的是真話,因為鑰匙兩人都有一把。
【不可否認性】
如果今天蛋糕上蓋了一個玻璃罩,上面留下了Alice 的指紋。這下就算鬧上法庭,這枚無法偽造且獨一無二的指紋就是鐵證,讓 Alice 徹底啞口無言,再也無法翻臉賴帳(達成不可否認性)。